package br.net.atasacramental.organizacao.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import org.hibernate.annotations.Formula;
import org.hibernate.annotations.Immutable;
import org.hibernate.annotations.Subselect;



@Entity(name="OrganizacaoOrcamentoView")
@Immutable
@Subselect("SELECT A.ID_ORGANIZACAO, A.ID_TRIMESTRE ,SUM(A.ORCAMENTO_SOLICITADO) AS ORCAMENTO_SOLICITADO,SUM(A.ORCAMENTO_APROVADO) AS ORCAMENTO_APROVADO,SUM(A.ORCAMENTO_UTILIZADO) AS ORCAMENTO_UTILIZADO,SUM(A.ORCAMENTO_DISPONIBILIZADO) AS ORCAMENTO_DISPONIBILIZADO FROM ( "
	    +" SELECT E.ID_ORGANIZACAO, E.ID_TRIMESTRE,SUM(E.ORCAMENTO) AS ORCAMENTO_SOLICITADO,0 AS ORCAMENTO_APROVADO,0 AS ORCAMENTO_UTILIZADO,0 AS ORCAMENTO_DISPONIBILIZADO "
	    +" FROM  "
	    +" EVENTO E "
	    +" WHERE "
	    +" E.ID_STATUS = 2 "
	    +" GROUP BY E.ID_ORGANIZACAO,E.ID_TRIMESTRE  "
	    +" UNION "
	    +" SELECT E.ID_ORGANIZACAO, E.ID_TRIMESTRE,0 AS ORCAMENTO_SOLICITADO,SUM(E.ORCAMENTO) AS ORCAMENTO_APROVADO,0 AS ORCAMENTO_UTILIZADO,0 AS ORCAMENTO_DISPONIBILIZADO "
	    +" FROM  "
	    +" EVENTO E "
	    +" WHERE "
	    +" E.ID_STATUS = 4 "
	    +" GROUP BY E.ID_ORGANIZACAO,E.ID_TRIMESTRE  "
	    +" UNION "
	    +" SELECT E.ID_ORGANIZACAO,E.ID_TRIMESTRE,0 AS ORCAMENTO_SOLICITADO,0 AS ORCAMENTO_APROVADO,SUM(E.ORCAMENTO) AS ORCAMENTO_UTILIZADO,0 AS ORCAMENTO_DISPONIBILIZADO "
	    +" FROM "
	    +" EVENTO E "
	    +" WHERE "
	    +" E.ID_STATUS = 7 "
	    +" GROUP BY E.ID_ORGANIZACAO,E.ID_TRIMESTRE  "
	    +" UNION "
	    +" SELECT OL.ID_ORGANIZACAO, OL.ID_TRIMESTRE,0 AS ORCAMENTO_SOLICITADO,0 AS ORCAMENTO_APROVADO,0 AS ORCAMENTO_UTILIZADO,SUM(OL.VALOR) AS ORCAMENTO_DISPONIBILIZADO "
	    +" FROM "
	    +" ORGANIZACAO_LANCAMENTO OL "   
	    +"  GROUP BY OL.ID_ORGANIZACAO,OL.ID_TRIMESTRE "
	    +" )A GROUP BY A.ID_ORGANIZACAO,A.ID_TRIMESTRE ")
public class OrganizacaoOrcamentoView {
	
	@Id	 
	@Column(name="ID_ORGANIZACAO")
	private int idOrganizacao;
	@Column(name = "ID_TRIMESTRE")
	private int idTrimestre;
	@Column(name = "ORCAMENTO_SOLICITADO")
	private Integer orcamentoSolicitado;
	@Column(name = "ORCAMENTO_APROVADO")
	private Integer orcamentoAprovado;
	@Column(name = "ORCAMENTO_UTILIZADO")
	private Integer orcamentoUtilizado;
	@Column(name = "ORCAMENTO_DISPONIBILIZADO")
	private Integer orcamentoDisponibilizado;	
	@Formula("ORCAMENTO_DISPONIBILIZADO-ORCAMENTO_UTILIZADO")
	private int saldo;
	
	public OrganizacaoOrcamentoView() {
	}
	public int getIdOrganizacao() {
		return idOrganizacao;
	}

	public void setIdOrganizacao(int idOrganizacao) {
		this.idOrganizacao = idOrganizacao;
	}

	public Integer getOrcamentoSolicitado() {
		return orcamentoSolicitado;
	}

	public void setOrcamentoSolicitado(Integer orcamentoSolicitado) {
		this.orcamentoSolicitado = orcamentoSolicitado;
	}

	public Integer getOrcamentoAprovado() {
		return orcamentoAprovado;
	}

	public void setOrcamentoAprovado(Integer orcamentoAprovado) {
		this.orcamentoAprovado = orcamentoAprovado;
	}

	public Integer getOrcamentoUtilizado() {
		return orcamentoUtilizado;
	}
	public void setOrcamentoUtilizado(Integer orcamentoUtilizado) {
		this.orcamentoUtilizado = orcamentoUtilizado;
	}

	public Integer getOrcamentoDisponibilizado() {
		return orcamentoDisponibilizado;
	}
	public void setOrcamentoDisponibilizado(Integer orcamentoDisponibilizado) {
		this.orcamentoDisponibilizado = orcamentoDisponibilizado;
	}
	public int getSaldo() {
		return saldo;
	}
	public void setSaldo(int saldo) {
		this.saldo = saldo;
	}
	public int getIdTrimestre() {
		return idTrimestre;
	}
	public void setIdTrimestre(int idTrimestre) {
		this.idTrimestre = idTrimestre;
	}	
}
